<?php


class Main{
    
    
    private static $service;
    private static $serviceClass;


    //Demande de démarrage d'un service.
    //Un service fournit les comportements spécifiques à une page.
    public static function runService($serviceADemarrer='Default'){
        
		try {
			//lien sur le service demandé
			$serviceLink='php/service/Svc'.$serviceADemarrer.'.php';
            if(Includer::add($serviceLink)){
                self::$serviceClass='Svc'.$serviceADemarrer;
            }
			if(SvcCommun::checkConnexion()){
				//Si un service connecté existe, on l'utilise. Sinon, on reste sur celui par défaut
				$connectedLink='php/service/connect/Svc'.$serviceADemarrer.'.php';
				if(Includer::add($connectedLink)){
					//redirection sur le service connecté
					self::$serviceClass='Svc'.$serviceADemarrer.'Connected';
				}
			}
			
			//si un service est sélectionné
			if(self::$serviceClass!=null){
				//on l'instancie
				self::$service=new self::$serviceClass();
			}
			//sinon, c'est qu'on a demandé un service non autorisé (ex : crud sans connexion)
			else{
				Security::notAllowedPage();
			}
			
			//vérifier les actions de l'utilisateur
			self::check();
					
			//génération de la vue
			Template::prepare();
		} catch (Exception $e) {
			ob_end_clean();
			Message.crash($e->getMessage());
		}

        
    }
    
    
    public static function __callStatic($name, $arguments){
        //redirige les appels de type Main::unTruc() vers Service::unTruc()
        if(method_exists(self::$service, $name)){
            $refl = new ReflectionMethod(self::$serviceClass, $name);
            if($refl->isStatic()){
                return forward_static_call_array(array(self::$service, $name), $arguments);
            }
            return call_user_func_array(array(self::$service, $name), $arguments);
        }
        return forward_static_call(array('SvcCommun', $name), $arguments);
    }
    
    
}

require_once('php/outils/include.outil.php');

ob_start();


?>